﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace System.Windows.Media.Media3D10
{
    /// <summary>
    /// Classe helper fournissant les opérations mathématiques essentielles à l'utilisation du Framework
    /// </summary>
    public static class Math10
    {
        /// <summary>
        /// Crée un nouvel exponentiel complex
        /// </summary>
        /// <param name="x">Coefficient x</param>
        /// <param name="y">Coefficient y</param>
        /// <returns>Retourne un complexe sous la forme exp(x+iy)</returns>
        public static Complex ComplexExp(double x, double y)
        {
            return new Complex(x * Math.Cos(y), x * Math.Sin(y));
        }

        /// <summary>
        /// Converti un angle exprimé en degrés en angle exprimé en radians
        /// </summary>
        /// <param name="degrees">Angle exprimé en degrés</param>
        /// <returns>Angle exprimé en radians</returns>
        public static float ToRadians(this float degrees)
        {
            return (degrees * (float)Math.PI / 180.0f) % (2 * (float)Math.PI);
        }

        /// <summary>
        /// Converti un angle exprimé en radians en angle exprimé en degrés
        /// </summary>
        /// <param name="radians">Angle exprimé en radians</param>
        /// <returns>Angle exprimé en degrés</returns>
        public static float ToDegrees(this float radians)
        {
            return (radians * 180.0f / (float)Math.PI) % 360.0f;
        }

        /// <summary>
        /// Converti un angle exprimé en degrés en angle exprimé en radians
        /// </summary>
        /// <param name="degrees">Angle exprimé en degrés</param>
        /// <returns>Angle exprimé en radians</returns>
        public static double ToRadians(this double degrees)
        {
            return (degrees * Math.PI / 180.0) % (2 * Math.PI);
        }

        /// <summary>
        /// Converti un angle exprimé en radians en angle exprimé en degrés
        /// </summary>
        /// <param name="radians">Angle exprimé en radians</param>
        /// <returns>Angle exprimé en degrés</returns>
        public static double ToDegrees(this double radians)
        {
            return (radians * 180.0 / Math.PI) % 360.0;
        }
    }
}
